package com.ms.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ms.domain.dto.MusicUpdateDTO;
import com.ms.domain.dto.MusicUploadDTO;
import com.ms.domain.entity.Music;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface MusicService {

    /**
     * 上传音乐
     * @param dto 音乐信息
     * @param audioFile 音频文件
     * @param coverImage 封面图片
     * @return 音乐信息
     */
    Music uploadMusic(MusicUploadDTO dto, MultipartFile audioFile, MultipartFile coverImage);

    /**
     * 根据id获取音乐
     * @param id 音乐id
     * @return 音乐信息
     */
    Music getMusicById(Integer id);

    /**
     * 分页获取音乐列表
     * @param page 页码
     * @param size 每页数量
     * @return 音乐分页数据
     */
    Page<Music> getMusicPage(Integer page, Integer size);

    /**
     * 根据曲风id获取音乐列表
     * @param genreId 曲风id
     * @return 音乐列表
     */
    List<Music> getMusicByGenre(Integer genreId);

    /**
     * 根据曲风id分页获取音乐列表
     * @param genreId 曲风id
     * @param page 页码
     * @param size 每页数量
     * @return 音乐分页数据
     */
    Page<Music> getMusicPageByGenre(Integer genreId, Integer page, Integer size);

    /**
     * 获取用户音乐列表
     * @param userId 用户id
     * @return 音乐列表
     */
    List<Music> getUserMusic(Integer userId);

    /**
     * 分页获取用户音乐列表
     * @param userId 用户id
     * @param page 页码
     * @param size 每页数量
     * @return 音乐分页数据
     */
    Page<Music> getUserMusicPage(Integer userId, Integer page, Integer size);

    /**
     * 更新音乐信息
     * @param dto 音乐更新信息
     */
    void updateMusic(MusicUpdateDTO dto);

    /**
     * 删除音乐
     * @param id 音乐id
     */
    void deleteMusic(Integer id);
}